Программирование драйверов Windows

Секция [CopyFiles]


Секции [CopyFiles] имеют уникальные для INF файла названия, ссылки на них исходят из директив CopyFiles секций [DDInstall]. Соответственно, конкретные имена этих секций определяет сам разработчик inf-файла.

Каждая запись внутри секции [CopyFiles] имеет вид

destination-filename[, source-filename][, temp-filename][, flag]

где destination-filename является целевым (то есть новым, конечным) именем файла после копирования. Предполагается, что и исходный файл имеет такое же имя. В том случае, если исходный файл все-таки называется иначе, необходимо указать source-filename. Требование указывать temp-filename

все еще требуется для Windows 98/Me, и это поле вводит промежуточное имя для нового файла до момента первой перезагрузки системы. В Windows 2000/XP/2003 это значение игнорируется.

Таблица 12.5. Определение значения flag

в записях секции [CopyFiles]



Значение Символьное имя Описание
0x0400 COPYFLG_REPLACEONLY Копировать исходный файл только в том случае, если в целевой директории есть файл с таким именем
0x0800 COPYFLG_NODECOMP Копировать без разархивации (если файл обработан архиватором)
0x0008 COPYFLG_FORCE_FILE_IN_USE Если файл с целевым именем в целевой директории сейчас открыт, то следует копировать исходный файл в файл с временным именем, форсировать перезагрузку, после чего переименовать временный файл
0x0010 COPYFLG_NO_OVERWRITE Не переписывать существующие одноименные файлы в целевой директории
0x1000 COPYFLG_REPLACE_BOOT_FILE Файл является частью системной загрузки, форсировать перезагрузку системы
0x2000 COPYFLG_NOPRUNE Осуществить копирование, даже если инсталлятор не считает эту операцию целесообразной
0x0020 COPYFLG_NO_VERSION_DIALOG Не переписывать одноименные существующие файлы, которые датированы как более новые, нежели предназначенные к записи (игнорируется, если инсталлируемый пакет имеет цифровую подпись)
0x0004 COPYFLG_NOVERSIONCHECK Всегда переписывать целевые файлы (флаг игнорируется, если инсталлируемый пакет имеет цифровую подпись)
0x0040 COPYFLG_OVERWRITE_OLDER_ONLY Переписывать только те существующие файлы, которые являются более старыми, чем имеющиеся в пакете (данный флаг игнорируется, если инсталлируемый пакет имеет цифровую подпись)
0x0001 COPYFLG_WARN_IF_SKIP Предупреждать пользователя о возникшей необходимости пропустить переписывание файл (игнорируется, если инсталлируемый пакет имеет цифровую подпись)
0x0002 COPYFLG_NOSKIP Запретить пользователю выбор возможности пропуска каких-либо файлов при копировании (всегда применяется, если инсталлируемый пакет имеет цифровую подпись)
<
Значение flag определяет управление новым целевым файлом, что подробнее отражено в таблице 12.5. Для описания сложного управления необходимо выполнять ИЛИ над операндами &#8212 для получения одновременного воздействия указываемых вариантов. Некоторые варианты взаимно исключают друг друга (например, COPYFLG_WARN_IF_SKIP и COPYFLG_NOSKIP), поэтому следует в сомнительных ситуациях обратиться к документации.

Так как секции [CopyFiles] не имеют синтаксических средств указывать диск или полный путь к исходному файлу, то следует использовать другие секции, такие как [SourceDisksNames] и [SourceDisksFiles]. Место (конкретные файловые каталоги), куда файлы будут помещены в результате установки, определяется другой секцией, называемой [DestinatonDirs].

Следует отметить, что здесь секция [CopyFiles] описывается, как присутствующая в inf-файле по той причине, что на нее ссылалась директива CopyFiles

из секции [DDInstall]. На самом деле, директива CopyFiles

может присутствовать и в секции [ClassInstall32], которая посвящена инсталляции нового класса устройств в системе (будет рассмотрена ниже). Вводимая таким образом секция [CopyFiles] должна быть построена по таким же правилам, как указано здесь.


Содержание раздела